signature DYNAMIC_COMMANDS =
  sig
    val followCommand : string -> unit

    val registerCommand :
      (string *				(* name *)
       cwbModule *			(* module owning this command *)
       (cwbProcessAlgebra * string * (unit -> unit)))
(* entry is relevant PA, docstring, callback *)
      -> unit

    val registerCommands : cwbModule -> cwbProcessAlgebra ->
(* (name, docstring, callback) list *)
      (string * string * (unit -> unit)) list -> unit

      
    (* first string is the alias, second is what it's an alias for. *)
    val registerAlias : (string * string) -> unit

(* These are just for UI, though we're not enforcing that right now: *)
    val getHelpOn : string -> string	(* will return "" if there's no help *)
    val currentProcessAlgebraString : unit -> string
    val setCurrentProcessAlgebra : cwbProcessAlgebra -> unit
(* This is useful when building and rebuilding bits of the CWB: not *)
(* intended for use by a CWB module, just by the compiling-developer! *)
    val forgetAllCommands: unit -> unit
(* print out all the information in the current commands database: for *)
(* debugging, no user interface at present. *)
    val allCommandsString : unit -> string
  end
